প্যারামিটার পাসিং: পাস-বাই-ভ্যালু এবং পাস-বাই-রেফারেন্স

Computer Programming - সি++ প্রোগ্রামিং (C++ Programming) ফাংশন |
243
243

C++ এ ফাংশনে প্যারামিটার পাসিং মূলত দুটি উপায়ে করা যায়: পাস-বাই-ভ্যালু (Pass-by-Value) এবং পাস-বাই-রেফারেন্স (Pass-by-Reference)। প্রতিটি পদ্ধতির নিজস্ব বৈশিষ্ট্য ও সুবিধা রয়েছে এবং এটি নির্ভর করে প্রোগ্রামের প্রয়োজনীয়তার উপর।

১. পাস-বাই-ভ্যালু (Pass-by-Value)

পাস-বাই-ভ্যালু হলো প্যারামিটার পাসিং এর একটি পদ্ধতি যেখানে মূল ভ্যারিয়েবলের মানের একটি কপি ফাংশনে পাঠানো হয়। এই পদ্ধতিতে ফাংশনে যে পরিবর্তনই করা হোক না কেন, তা মূল ভ্যারিয়েবলে প্রভাবিত হয় না।

উদাহরণ: পাস-বাই-ভ্যালু

#include <iostream>
using namespace std;

void modifyValue(int x) { // x এর মান কপি হিসেবে পাস হয়েছে
    x = 20; // এখানে কেবলমাত্র কপিটি পরিবর্তিত হবে
}

int main() {
    int a = 10;
    modifyValue(a); // ফাংশনে a এর মান কপি হিসেবে পাস হবে
    cout << "Value of a after function call: " << a << endl; // Output: 10
    return 0;
}

বর্ণনা:

  • এখানে a এর মান modifyValue ফাংশনে পাঠানো হয়েছে, কিন্তু ফাংশনে কেবল a এর একটি কপি পাঠানো হয়েছে। তাই ফাংশনের ভিতরে x এর মান পরিবর্তিত হলেও মূল a এর মান অপরিবর্তিত থাকে।

সুবিধা:

  • পাস-বাই-ভ্যালু মূল ভ্যারিয়েবল থেকে আলাদা একটি কপি তৈরি করে, তাই ফাংশনে কোনো পরিবর্তন করলে মূল ডেটা পরিবর্তিত হয় না।

অসুবিধা:

  • বড় ডেটা টাইপের ক্ষেত্রে এটি বেশি মেমোরি ব্যবহার করে, কারণ প্রতিবার কপি তৈরি করতে হয়।

২. পাস-বাই-রেফারেন্স (Pass-by-Reference)

পাস-বাই-রেফারেন্স পদ্ধতিতে মূল ভ্যারিয়েবলের রেফারেন্স (অ্যাড্রেস) ফাংশনে পাঠানো হয়। ফলে ফাংশনে যে পরিবর্তন করা হয়, তা সরাসরি মূল ভ্যারিয়েবলে প্রতিফলিত হয়। এই পদ্ধতিতে & (অ্যাম্পারস্যান্ড) চিহ্ন ব্যবহার করে রেফারেন্স পাস করা হয়।

উদাহরণ: পাস-বাই-রেফারেন্স

#include <iostream>
using namespace std;

void modifyValue(int &x) { // x এর রেফারেন্স পাস হয়েছে
    x = 20; // এখানে মূল ভ্যারিয়েবল পরিবর্তিত হবে
}

int main() {
    int a = 10;
    modifyValue(a); // ফাংশনে a এর রেফারেন্স পাস করা হচ্ছে
    cout << "Value of a after function call: " << a << endl; // Output: 20
    return 0;
}

বর্ণনা:

  • এখানে a এর রেফারেন্স modifyValue ফাংশনে পাঠানো হয়েছে। তাই ফাংশনে x এর মাধ্যমে a এর আসল মান পরিবর্তিত হয়। আউটপুটে দেখা যাবে যে a এর মান ১০ থেকে ২০ তে পরিবর্তিত হয়েছে।

সুবিধা:

  • পাস-বাই-রেফারেন্স মেমোরি সাশ্রয়ী, কারণ এটি কপি তৈরি করে না।
  • বড় ডেটা টাইপের ক্ষেত্রে এটি কার্যকর, কারণ সরাসরি রেফারেন্স ব্যবহার করা হয়।

অসুবিধা:

  • মূল ডেটা পরিবর্তন হওয়ার ঝুঁকি থাকে, কারণ রেফারেন্স দ্বারা সরাসরি মেমোরি অ্যাক্সেস করা হয়।

পাস-বাই-ভ্যালু বনাম পাস-বাই-রেফারেন্স

বৈশিষ্ট্যপাস-বাই-ভ্যালুপাস-বাই-রেফারেন্স
ডেটা কপিহ্যাঁ, ডেটার কপি পাস হয়না, সরাসরি রেফারেন্স পাস হয়
মূল ডেটার উপর প্রভাবমূল ডেটা পরিবর্তিত হয় নামূল ডেটা সরাসরি পরিবর্তিত হয়
মেমোরি ব্যবহারবেশি মেমোরি ব্যবহার করেমেমোরি সাশ্রয়ী
বড় ডেটা টাইপের ক্ষেত্রেকম কার্যকরবেশি কার্যকর
ব্যবহারিক ক্ষেত্রযখন মূল ডেটা অপরিবর্তিত রাখা প্রয়োজনযখন মূল ডেটা পরিবর্তন প্রয়োজন

পাস-বাই-কন্সট্যান্ট রেফারেন্স

যখন আমরা রেফারেন্স পাস করতে চাই কিন্তু ফাংশনে ডেটা পরিবর্তন করতে চাই না, তখন const reference ব্যবহার করা হয়। এটি ডেটা নিরাপত্তা নিশ্চিত করে।

উদাহরণ: পাস-বাই-কন্সট্যান্ট রেফারেন্স

#include <iostream>
using namespace std;

void displayValue(const int &x) { // const রেফারেন্স ব্যবহার করা হয়েছে
    cout << "Value: " << x << endl;
    // x = 20; // এটি একটি ত্রুটি, কারণ x কন্সট্যান্ট রেফারেন্স
}

int main() {
    int a = 10;
    displayValue(a);
    return 0;
}

বর্ণনা:

  • এখানে displayValue ফাংশনে a এর কন্সট্যান্ট রেফারেন্স পাস করা হয়েছে। এতে করে x এর মাধ্যমে a এর মান দেখা যাবে কিন্তু কোনো পরিবর্তন করা যাবে না।

সারসংক্ষেপ

  • পাস-বাই-ভ্যালু: ডেটার একটি কপি ফাংশনে পাস হয়, মূল ডেটা অপরিবর্তিত থাকে।
  • পাস-বাই-রেফারেন্স: মূল ডেটার রেফারেন্স পাস হয়, মূল ডেটা পরিবর্তিত হতে পারে।
  • পাস-বাই-কন্সট্যান্ট রেফারেন্স: রেফারেন্স পাস হয়, কিন্তু কন্সট্যান্ট হওয়ায় ডেটা পরিবর্তন করা যায় না।

ফাংশনে প্যারামিটার পাস করার পদ্ধতি নির্ভর করে প্রোগ্রামের প্রয়োজনীয়তা এবং মেমোরি ব্যবহারের দক্ষতার উপর।

common.content_added_and_updated_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion